Multi-threading is a technique that split instructions into multiple streams of executions (or threads) so that they may be processed in parallel.
FIG. 1A is a block diagram illustrating an example of a prior art system that can be used to support multi-threading. The system 100 includes two physical processors 105 and 110 and may be used to execute multi-threaded software applications. Each of the physical processors 105 and 110 may include similar set of resources (e.g., architecture states, execution resources, caches, etc.). The two physical processors may share a common system bus 115 and a common main memory 120.
Typically, to increase parallelism, the system 100 may employ a scheduling technique that dispatches a thread whenever the thread is ready to be dispatched.